package com.leetcode.p0;

import com.bean.TreeNode;
import com.utils.TreeUtils;

/**
 * 递归方案
 */
public class Test98 {

    //    如果该二叉树的左子树不为空，则左子树上所有节点的值均小于它的根节点的值；
//    若它的右子树不空，则右子树上所有节点的值均大于它的根节点的值；
//    它的左右子树也为二叉搜索树
    public boolean isValidBST(TreeNode root) {
        return helper(root, Long.MIN_VALUE, Long.MAX_VALUE);
    }

    private boolean helper(TreeNode node, long lower, long upper) {
        if (node == null) {
            return true;
        }

        if (node.val <= lower || node.val >= upper) {
            return false;
        }

        return helper(node.left, lower, node.val) && helper(node.right, node.val, upper);
    }

    public static void main(String[] args) {
        TreeNode treeNode = TreeUtils.buildTree4();
//        TreeNode treeNode = TreeUtils.buildTree("1,1");
        TreeUtils.showTree(treeNode);

        Test98 test = new Test98();
        boolean result = test.isValidBST(treeNode);
        System.out.println(result);
    }

}
